package com.Dec_Seven;

import java.util.ArrayList;
import java.util.List;

/**
 * 816. 模糊坐标
 * 我们有一些二维坐标，如 "(1, 3)" 或 "(2, 0.5)"，然后我们移除所有逗号，小数点和空格，得到一个字符串S。返回所有可能的原始字符串到一个列表中。
 *
 * 原始的坐标表示法不会存在多余的零，所以不会出现类似于"00", "0.0", "0.00", "1.0", "001", "00.01"或一些其他更小的数来表示坐标。此外，一个小数点前至少存在一个数，所以也不会出现“.1”形式的数字。
 *
 * 最后返回的列表可以是任意顺序的。而且注意返回的两个数字中间（逗号之后）都有一个空格。
 *
 *  
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/ambiguous-coordinates
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * 2022/11/07 15:21
 */

public class Solution816 {

    String string;

    public List<String> ambiguousCoordinates(String s) {
        string=s.substring(1,s.length()-1);
        int n=string.length();
        List<String> ans=new ArrayList<>();
        for (int i = 0; i < n-1; i++) {
            List<String> x=search(0,i);
            List<String> y=search(i+1,n-1);
            for (String a:x)
            {
                for (String b:y){
                    ans.add("("+a+", "+b+")");
                }
            }
        }
        return ans;
    }

    List<String> search(int start,int end){
        List<String> ans=new ArrayList<>();
        if (start==end||string.charAt(start)!='0') ans.add(string.substring(start,end+1));
        for (int i = start; i < end; i++) {
            String a=string.substring(start,i+1);
            String b=string.substring(i+1,end+1);
            if (a.length()>1&&a.charAt(0)=='0') continue;
            if (b.charAt(b.length()-1)=='0') continue;
            ans.add(a+"."+b);
        }
        return ans;
    }


    public static void main(String[] args) {
        Solution816 solution816=new Solution816();
        System.out.println(solution816.ambiguousCoordinates("(100)"));
    }
}
